package org.example.doubleFinger;

import java.util.Arrays;

public class Flip_words_in_a_string {
    public static void main(String[] args) {
        //翻转字符串里的单词

        //给你一个字符串 s ，请你反转字符串中 单词 的顺序。
        //单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
        //返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
        //注意：输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中，单词间应当仅用单个空格分隔，且不包含任何额外的空格。
        String s = "  hello   world!  ";
        //System.out.println(s);
        System.out.println(reverseWord(s));
//        String s1 = reverse(s, 0, s.length());
//        System.out.println(s);
//        System.out.println(s1);

    }
    public static String reverseWord(String s) {
        s = delete(s);
        int slow = 0;
        int fast = 0;
        while (fast<s.length()) {
            if (s.charAt(fast)!=' '){
                fast++;
                if (fast==s.length()){
                    s =  reverse(s,slow,fast);
                }
            }else {
                s = reverse(s, slow, fast);
                slow =++fast;
            }
        }
        return s;
    }

    //处理字符串，去掉多余的空格
    public static String delete(String s){
        StringBuilder sb = new StringBuilder();
        int before = 0;
        int after = s.length()-1;
        for (int i = 0; i <s.length(); i++) {
            if (s.charAt(i)!=' '){
                break;
            }
            before++;
        }
        for (int i = s.length()-1; i >=0; i--) {
            if (s.charAt(i)!=' '){
                break;
            }
            after--;
        }
        for (int i = after; i >= before; i--) {
            if (i!=before && s.charAt(i-1)==' ' && s.charAt(i)==' '){
                continue;
            }else {
                sb.append(s.charAt(i));
            }
        }
        return sb.toString();
    }
    //翻转函数
    public static String reverse(String s,int slow,int fast){
        char[] chars = s.toCharArray();
        for (int i = slow,j = fast-1; i <= j; i++,j--) {
            char temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;

        }
        return new String(chars);
    }
}
